/*
 * @Description: es6 基础练习
 * @Version: 1.0
 * @Author: wen shukai
 * @Date: 2022-06-28 17:59:25
 * @LastEditTime: 2022-06-30 11:27:55
 * @LastEditors: wen shukai
 * @FilePath: \self-taught-js\es6.ts
*/

//箭头函数的this 是指向函数声明所在的作用域下的this 的值 用call 方法也不能改变
// const person = function () {
//   console.log(this.name)
// }
// //声明全局作用域下声明 所以this的指向是window
// const person2 = () => {
//   console.log(this.name)
// }


export function formatCurrency(
  number: string | number,
  decimals = 2,
  dec_point = '.',
  thousands_sep = ',',
  roundtag = 'round'
) {
  if (isEmpty(number)) {
    return null
  } else {
    number = (number + '').replace(/[^0-9+-Ee.]/g, '')
    roundtag = roundtag || 'ceil' // "ceil","floor","round"
    const n = !isFinite(+number) ? 0 : Number(number) // 检查number是否是无穷大
    const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
    const sep = typeof thousands_sep === 'undefined' ? ',' : thousands_sep
    const dec = typeof dec_point === 'undefined' ? '.' : dec_point
    let s: any = ''
    const toFixedFix = function (n: number, prec: number) {
      const k = Math.pow(10, prec) // 10 的 prec 次幂

      return (
        '' +
        parseFloat(
          Math[roundtag](parseFloat((n * k).toFixed(prec * 2))).toFixed(
            prec * 2
          )
        ) /
        k
      ) // 解析一个字符串，并返回一个浮点数。
    }
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.')
    const re = /(-?\d+)(\d{3})/
    while (re.test(s[0])) {
      s[0] = s[0].replace(re, '$1' + sep + '$2')
    }

    if ((s[1] || '').length < prec) {
      s[1] = s[1] || ''
      s[1] += new Array(prec - s[1].length + 1).join('0')
    }
    // 当数字位数过长去除科学计数法
    return toNonExponential(s.join(dec))
  }
}

export function toNonExponential(num: any) {
  if (num.indexOf('E') !== -1 || num.indexOf('e') !== -1) {
    // 验证是否为科学计数法
    const m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/)
    return num.toFixed(Math.max(0, (m[1] || '').length - m[2]))
  } else {
    return num
  }
}
formatCurrency(10000000)
